import pandas as pd
import os
from datetime import datetime
import logging

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# 可配置的列名 - 根据实际Excel文件调整
CUSTOMER_COLUMN = '客户'      # 客户列名（实际Excel列名）
DATE_COLUMN = '创建时间'      # 日期列名（实际Excel列名）
FREIGHT_COLUMN = '净重'       # 货运需求量列名（实际Excel列名）


def main():
    # 文件路径配置
    excel_path = r'c:\Users\HP\OneDrive\Desktop\所有文件\123\project黄飞燕\FhjlViewDD.xlsx'
    output_path = r'c:\Users\HP\OneDrive\Desktop\所有文件\123\project黄飞燕\june_customer_freight_summary.xlsx'

    try:
        # 读取Excel数据
        logger.info(f'正在读取Excel文件: {excel_path}')
        df = pd.read_excel(excel_path, engine='openpyxl')
        logger.info(f'成功加载数据，共 {len(df)} 行记录')

        # 检查必要列是否存在
        required_columns = [CUSTOMER_COLUMN, DATE_COLUMN, FREIGHT_COLUMN]
        missing_columns = [col for col in required_columns if col not in df.columns]
        if missing_columns:
            available_columns = ', '.join(df.columns)
            raise ValueError(f"Excel文件缺少必要列: {missing_columns}。可用列有: {available_columns}。请检查并修改程序中的列名变量。")

        # 转换日期列并处理无效日期
        df[DATE_COLUMN] = pd.to_datetime(df[DATE_COLUMN], errors='coerce')
        valid_dates_df = df.dropna(subset=[DATE_COLUMN])
        invalid_dates_count = len(df) - len(valid_dates_df)
        if invalid_dates_count > 0:
            logger.warning(f'发现 {invalid_dates_count} 行无效日期数据，已自动过滤')
        df = valid_dates_df

        # 筛选6月份数据（当前年份）
        current_year = datetime.now().year
        df_june = df[(df[DATE_COLUMN].dt.year == current_year) & (df[DATE_COLUMN].dt.month == 6)]

        if len(df_june) == 0:
            logger.warning(f'未找到 {current_year} 年6月份的数据记录，尝试查找所有年份的6月份数据...')
            df_june = df[df[DATE_COLUMN].dt.month == 6]
            if len(df_june) == 0:
                raise ValueError('未找到任何年份的6月份数据记录，请检查日期列格式')
            current_year = '所有年份'

        logger.info(f'筛选出 {current_year} 年6月份数据共 {len(df_june)} 行')

        # 按客户汇总货运需求量
        customer_summary = df_june.groupby(CUSTOMER_COLUMN)[FREIGHT_COLUMN].sum().reset_index()
        customer_summary = customer_summary.rename(columns={FREIGHT_COLUMN: '6月份货运需求总量'})

        # 按需求量从大到小排序
        customer_summary = customer_summary.sort_values(by='6月份货运需求总量', ascending=False)
        customer_summary = customer_summary.reset_index(drop=True)

        if customer_summary.empty:
            raise ValueError('汇总后没有数据，请检查筛选条件和列名配置')

        # 输出结果到控制台
        logger.info(f'\n{current_year}年6月份客户货运需求量统计结果（按总量降序）：')
        print(customer_summary.to_string(index=False))

        # 保存结果到Excel文件
        customer_summary.to_excel(output_path, index=False, engine='openpyxl')
        logger.info(f'统计结果已保存至: {output_path}')

    except FileNotFoundError:
        logger.error(f'错误：Excel文件不存在，请确认路径正确: {excel_path}')
    except PermissionError:
        logger.error(f'错误：没有权限访问文件，请确保文件未被占用且有权限读取: {excel_path}')
    except ValueError as ve:
        logger.error(f'数据处理错误: {ve}')
    except Exception as e:
        logger.error(f'发生未知错误: {str(e)}')

if __name__ == '__main__':
    main()